package com.niuwa.p2p.dao.productTemplate;

import java.util.List;
import java.util.Map;

import com.niuwa.p2p.dao.MyBatisDao;
import com.niuwa.p2p.entity.productTemplate.ProductTemplate;
import com.niuwa.p2p.vo.productTemplate.InvestProdTemplateVo;

@MyBatisDao
public interface ProductTemplateDao {

	/**
	 * 统计用户个数
	 * 根据paramMap，统计出需要的客户数
	 * 例：适用于分页的时候，选取当前页的客户条数
	 * 
	 * @param paramMap 过滤得条件Map
	 * @return 总客户数
	 */
	public int count(Map<String, Object> paramMap);
	
	
	/**
	 * 选取客户集合
	 * 根据paramMap，选取需要的客户集合
	 * 例：适用于分页的时候，选取当前页的客户集合
	 * 
	 * @param paramMap 过滤得条件MapfindInvestProdTempByCondition
	 * @return List<User> 客户集合 
	 */
	public List<InvestProdTemplateVo> selectInvestProdTemplateBySelective(Map<String, Object> paramMap);
	
	/**
	 * 通过产品模板Id 选取单个产品模板
	 * 
	 * @param  tempId 产品模板Id
	 * @return ProductTemplate 产品模板实体
	 */
	public ProductTemplate selectByTempId(long tempId);
	
	/**
	 * 获取状态为审核的未删除的最新的债权转让模板信息
	 * @return
	 */
	public ProductTemplate selectLatestProTemplate();
	
	/**
	 * 通过产品模板Id 更新单个产品模板
	 * 
	 * @param productTemplate 产品模板 对象
	 * @throws Exception
	 */
	public int updateByProductTemplateSelective(ProductTemplate productTemplate)  throws Exception;
	
	/**
	 * 通过产品模板Id 删除单个产品模板
	 * 
	 * @param  tempId 产品模板Id
	 * @throws Exception
	 */
	public int deleteByTempId(long tempId)  throws Exception;
	
	/**
	 * 通过产品模板Id 
	 * 
	 * @param  tempId 产品模板Id
	 * @throws Exception
	 */
	public int updateByTempId(long tempId)  throws Exception;
	
	/**
	 * 添加产品模板基本信息
	 * 
	 * @param productTemplate
	 * @return
	 * @throws Exception
	 */
	public void addProductTemplate(ProductTemplate productTemplate) throws Exception;
	
	/**
	 * 根据产品模板类型、状态获取模板信息
	 * @param paramMap 过滤得条件
	 * @return List<ProductTemplate> 模板集合 
	 */
	public List<ProductTemplate> findInvestProdTempByCondition(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * 根据产品模板名称获取对应版本 
	 * @param paramMap 过滤得条件
	 * @return List<InvestProdTemplateVo> 模板集合 
	 */
	public List<InvestProdTemplateVo> findProdVersionByCondition(Map<String, Object> paramMap) throws Exception;
	
	/**
	 * 根据模版名称查询模版信息
	 * 
	 * @param productTemplate
	 * @return
	 */
	public int findProductTmptByName(ProductTemplate productTemplate);

}
